package thread;

/**
 * 线程的转换
 */
public class ThreadDemo11 {
    public static void main(String[] args) throws InterruptedException {
        Thread t = new Thread(() -> {
            for (int i = 0; i < 100; i++) {
                // 1.这个循环啥都不干，也不 sleep ---> 如果什么都不干，那么在下边 t 执行中的状态：为 RUNNABLE
                /* 2.加入 sleep 方法 ---> 此处在后续打印状态中，具体看到的是 RUNNABLE 还是 TIMED_WAITING
                    就不一定了取决于当前 t 线程运行到了哪个环节
                 */
                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });

        // 启动之前，获取 t 的状态，就是 new 状态
        System.out.println("start 之前："+t.getState());

        t.start();
        /* 通过循环获取，就能看到交替状态了，当前获取的状态是什么，完全取决于系统的调度操作
            获取状态的这一瞬间，到底 t 线程是在什么样的状态（正在执行，还是正在 sleep）
         */
        for (int i = 0; i < 1000; i++) {
            System.out.println(" t 执行中的状态：" + t.getState());
        }
        t.join(); // 此处的 join 就是让当前的 main 线程来等待 t 线程执行结束（等待 t 的 run 执行完）

        // 线程执行完毕之后，就是 TERMINATED 状态
        System.out.println(" t 结束之后：" + t.getState());
    }
}
